Aula 2

Mahayana Godoy

Visão Geral

Aula 2

  • Capítulos 1 e 2
  • Importar conjunto de dados
  • Explorar medidas de tendência central
  • Analisar distribuição de dados em um histograma

Vamos dar uma olhada em como iniciar uma seção no RStudio

Abrindo o Rstudio

Criando uma nova sessão

Criando comentários

Salvando seu script

Salvando seu script em .R

Vamos abrir um script existente

Arquivo da aula de hoje

Como o R funciona?

Linhas de comando

Confira os comandos a partir da linha 22 do tutorial

## Essa linha é um comentário. A linha abaixo é um comando. Deixe o cursor (aquela barrinha vertical que fica piscando) na linha do comando que deseja executar e aperte CTRL+ENTER. Tente fazer isso com o comando da linha abaixo.
2+2
## [1] 4

Linhas de comando

##Repita o comando com a equação abaixo
3+4
## [1] 7

Linhas de comando

##Repita o comando com a função abaixo
sqrt(4)
## [1] 2

Linhas de comando

##Repita o comando com a função abaixo
sqrt(81)
## [1] 9

Linhas de comando

##Para executar mais de uma linha de código, selecione tudo com o botão direito do mouse e aperte CTRL+ENTER
567+876
## [1] 1443
54*34
## [1] 1836
28-98
## [1] -70
sqrt(121)
## [1] 11

vetores e funções

Geralmente não usamos o R para fazer contas simples, mas para realizar cálculos sobre vetores.

Imagine que juntamos os valores pagos de aluguel por 13 estudantes que acabaram de mudar para Natal para estudar na UFRN, e com esses valores criamos o vetor “aluguel”

Nós criamos um vetor assim:

aluguel = c(345.2, 932, 784, 1042.3, 2102.9, 917.9, 890, 732, 832, 974.4, 668.4, 1022, 1210)

ou assim:

aluguel <- c(345.2, 932, 784, 1042.3, 2102.9, 917.9, 890, 732, 832, 974.4, 668.4, 1022, 1210)

Vetores e funções

  • Perceba que você criou um vetor chamado “aluguel” na área Environment.

  • Suponha que eu queira saber a média aritmética desse conjunto de dados. Que conta preciso fazer?

Vetores e funções

Soma de todos os valores / N

sum(aluguel)
## [1] 12453.1
length(aluguel)
## [1] 13

Vetores e funções

Soma de todos os valores / N

sum(aluguel)/length(aluguel)
## [1] 957.9308

Posso dar nomes para os valores criados a partir de funções

soma = sum(aluguel)
n = length(aluguel)

soma/n
## [1] 957.9308

Vetores e funções

Uma das vantagens do R é que ele faz essas contas sem precisarmos saber a fórmula!

A função para calcular a média de um vetor é mean(nome do vetor)

mean(aluguel)
## [1] 957.9308

Sua vez de treinar

Crie um vetor com as idades dos alunos da turma e

  1. identifique a média de idade da turma
  2. descubra quantos anos a turma tem se somarmos todas as idades

Vetores

No geral, nós não inserimos os vetores manualmente para análise, mas os importamos de uma tabela.

Vamos aprender a fazer isso no R.

Começando uma seção para exploração de dados

Pacotes

É bom pensarmos que pacotes vamos usar para as análises.

Instalando e carregando os pacotes

Precisamos primeiro instalar os pacotes que vamos usar com a função install.packages()

install.packages("readxl") #permite carregar arquivos .xls
install.packages("ggplot2") #permite gerar gráficos a partir de um conjunto de dados


Perceba que o nome do pacote é inserido entre aspas duplas.

Importando conjunto de dados

Vamos carregar os pacotes que iremos usar nesse curso com a função library()

library(readxl)  
library(ggplot2)

Importando conjunto de dados

Definindo área de trabalho

session (ou seção) >> set working directory >> choose directory

Importando conjunto de dados

Definindo área de trabalho

Podemos informar a área de trabalho manualmente (eu prefiro assim)

#exemplo 1
setwd("~/Documents/Mahayana/academics/cursos/introstatistics/datasets/")

#exemplo 2
setwd("C:/Users/Mahayana/academics/cursos/introstatistics/datasets")

Criando o conjunto de dados no seu script

Dizer ao R que conjunto daquela pasta ele deve ler e que nome ele receberá

Para isso, usamos a função read_excel

nome.do.conjunto = read_excel(“Nome_do_arquivo.xlsx”)

Criando o conjunto de dados no seu script

Hoje vamos importar o conjunto “scores.xlsx”, com o exemplo usado em Hinton (2004, Cap 2).

Esse conjunto de dados reúne as notas dos alunos de 0 a 100 para uma disciplina de graduação.

dados.scores = read_excel("scores.xlsx")

ATENÇÃO

Você também pode importar arquivos em .txt. Nesse caso, use a função read.table e adicione à sintaxe a expressão header = TRUE para informar que a primeira linha do arquivo é o nome (header) da coluna

dados.scores = read.table("scores.txt,", header = TRUE)

Explorando o conjunto de dados

Clique no conjunto recém-criado na área ENVIRONMENT

Explorando o conjunto de dados

Você pode agora ver o conjunto de dados que importamos

Explorando o conjunto de dados

A função str() te retorna informações sobre esse conjunto de dados, dizendo o nome das variáveis.

str(dados.scores)
## Classes 'tbl_df', 'tbl' and 'data.frame':    100 obs. of  1 variable:
##  $ scores: num  22 55 54 51 90 38 67 46 55 37 ...

Estatística descritiva

Conhecendo o conjunto de dados

Quando você for usar uma função qualquer (e.g. f()) para ler um vetor qualquer (e.g.,v) dentro de um conjunto de dados qualquer (e.g. dataset), sua sintaxe será f(dataset$v)

Vamos ordenar o conjunto de dados dados.score e ver quantas observações ele tem para ver como isso funciona:

length(dados.scores$scores)
## [1] 100
sort(dados.scores$scores)
##   [1]  0  9 15 22 26 30 32 32 33 34 37 37 38 41 43 44 45 45 45 46 46 47 47
##  [24] 48 48 49 49 49 50 50 50 50 50 51 51 51 52 52 52 52 52 53 53 54 54 54
##  [47] 54 55 55 55 55 55 55 56 56 56 56 56 56 56 57 57 57 57 57 58 58 58 58
##  [70] 58 59 59 59 59 59 60 60 60 60 60 61 61 61 62 62 62 62 63 63 64 64 65
##  [93] 67 68 69 71 75 78 80 90

Conhecendo a distribuição do conjunto de dados

Para conhecer a distribuição dos nossos dados, “plotamos” a frequência dos dados em um tipo de gráfico chamado histograma (cf. Hinton, p.19)

No R, usamos um pacote chamado ggplot2 e a função ggplot() para fazer vários tipos de gráfico, inclusive histogramas.

A sintaxe do ggplot2 é:

ggplot(nome_do_conjunto_de_dados, aes(x = valor_que_vai_no_eixo_x, y =  valor_que_vai_no_eixo_y))

Dica para se lembrar da sintaxe: aes vem de aesthetics. Ou seja, essa função define a estética, a cara do gráfico a partir dos vetores do conjunto de dados que estamos analisando.

Conhecendo a distribuição do conjunto de dados

Vamos tentar fazer o histograma dos dados dos scores para fazer algo semelhante ao gráfico da página 19 de Hinton

ggplot(dados.scores, aes(x = scores, y = ))

Conhecendo a distribuição do conjunto de dados

Precisamos informar que tipo de gráfico queremos!

ggplot(dados.scores, aes(x = scores, y = ))+
  geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Conhecendo a distribuição do conjunto de dados

Vamos entender o que ele quis dizer com esse bin = 30

## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

##   [1]  0  9 15 22 26 30 32 32 33 34 37 37 38 41 43 44 45 45 45 46 46 47 47
##  [24] 48 48 49 49 49 50 50 50 50 50 51 51 51 52 52 52 52 52 53 53 54 54 54
##  [47] 54 55 55 55 55 55 55 56 56 56 56 56 56 56 57 57 57 57 57 58 58 58 58
##  [70] 58 59 59 59 59 59 60 60 60 60 60 61 61 61 62 62 62 62 63 63 64 64 65
##  [93] 67 68 69 71 75 78 80 90

Conhecendo a distribuição do conjunto de dados

Queremos espalhar os dados para que cada quadradinho no gráfico represente um valor. Queremos dizer que os valores (breaks) do histograma devem ir de 0 a 100 (seq(0,100)) e que as observações devem ser dadas em um intervalo de 1 ponto (seq(by=1))

ggplot(dados.scores, aes(x = scores, y = ))+
  geom_histogram(breaks=seq(0, 100, by = 1))

Conhecendo a distribuição do conjunto de dados

ggplot(dados.scores, aes(x = scores, y = ))+
  geom_histogram(breaks=seq(0, 100, by = 1))

Conhecendo a distribuição do conjunto de dados

Vamos dar uma boa olhada nesse gráfico e ver o que ele nos diz. Onde as notas estão concentradas? Quais as medidas mais afastadas do centro?

Vamos ver os valores em ordem crescente para conferir o histograma

sort(dados.scores$scores)
##   [1]  0  9 15 22 26 30 32 32 33 34 37 37 38 41 43 44 45 45 45 46 46 47 47
##  [24] 48 48 49 49 49 50 50 50 50 50 51 51 51 52 52 52 52 52 53 53 54 54 54
##  [47] 54 55 55 55 55 55 55 56 56 56 56 56 56 56 57 57 57 57 57 58 58 58 58
##  [70] 58 59 59 59 59 59 60 60 60 60 60 61 61 61 62 62 62 62 63 63 64 64 65
##  [93] 67 68 69 71 75 78 80 90

Medidas de tendência central

  • Úteis para identificar um resultado que representa o conjunto de dados

    • média
    • mediana
    • moda

Medidas de tendência central: média

Para um vetor

aluguel = c(345.2, 932, 784, 1042.3, 2102.9, 917.9, 890, 732, 832, 974.4, 668.4, 1022, 1210)
mean(aluguel)
## [1] 957.9308

Para um conjunto de dados

mean(dados.scores$scores)
## [1] 52.62

Medidas de tendência central: média

Vantagem: sensível a todos os valores da amostra

aluguel = c(345.2, 932, 784, 1042.3, 2102.9, 917.9, 890, 732, 832, 974.4, 668.4, 1022, 1210)
mean(aluguel)
## [1] 957.9308
aluguel.2 = c(345.2, 932, 784, 1042.3, 2102.9, 917.9, 890, 732, 832, 974.4, 668.4, 1022, 1210,5060)
mean(aluguel.2)
## [1] 1250.936

Medidas de tendência central: média

Desvantagem (?): sensível a todos os valores da amostra

aluguel = c(345.2, 932, 784, 1042.3, 2102.9, 917.9, 890, 732, 832, 974.4, 668.4, 1022, 1210)
mean(aluguel)
## [1] 957.9308
aluguel.2 = c(345.2, 932, 784, 1042.3, 2102.9, 917.9, 890, 732, 832, 974.4, 668.4, 1022, 1210,5060)
mean(aluguel.2)
## [1] 1250.936

Medidas de tendência central: média

Você precisa conhecer seus dados para saber o que valores extremos indicam e o que se deve fazer com eles!

Medidas de tendência central: mediana

Medida central na distribuição da amostra

sort(dados.scores$scores)
##   [1]  0  9 15 22 26 30 32 32 33 34 37 37 38 41 43 44 45 45 45 46 46 47 47
##  [24] 48 48 49 49 49 50 50 50 50 50 51 51 51 52 52 52 52 52 53 53 54 54 54
##  [47] 54 55 55 55 55 55 55 56 56 56 56 56 56 56 57 57 57 57 57 58 58 58 58
##  [70] 58 59 59 59 59 59 60 60 60 60 60 61 61 61 62 62 62 62 63 63 64 64 65
##  [93] 67 68 69 71 75 78 80 90
median(dados.scores$scores)
## [1] 55

Medidas de tendência central: mediana

Vamos comparar as medianas de alugel e aluguel2

median(aluguel)
## [1] 917.9
median(aluguel.2)
## [1] 924.95

Medidas de tendência central: mediana

Vamos ver como as medianas foram calculadas

sort(aluguel)
##  [1]  345.2  668.4  732.0  784.0  832.0  890.0  917.9  932.0  974.4 1022.0
## [11] 1042.3 1210.0 2102.9
sort(aluguel.2)
##  [1]  345.2  668.4  732.0  784.0  832.0  890.0  917.9  932.0  974.4 1022.0
## [11] 1042.3 1210.0 2102.9 5060.0

Medidas de tendência central

Considere que você é um agente de viagens que deve escolher o melhor destino turístico para três grupos de cerca de 50 pessoas. Você primeiro se pergunta quantos anos eles têm. Um simples comando no R pode te dar essa resposta se você tem a idade dos membros do grupo.

Medidas de tendência central

mean(idade1)
## [1] 31.4717
mean(idade2)
## [1] 32.58491
mean(idade3)
## [1] 33.71698

Medidas de tendência central

  • Considerando a idade média do grupo, que lugares você sugeriria para passar um feriadão?

  • Já pensou? Ótimo, vamos ver a distribuição da idade dessas pessoas.

Grupo 1

Grupo 2

Grupo 3

Medidas de tendência central

Vamos dar uma olhada nas medianas de cada grupo

median(idade1)
## [1] 31
median(idade2)
## [1] 36
median(idade3)
## [1] 35

Moral da história

Não adianta apenas saber a média ou mediana do conjunto de dados se não souber como se organiza a distribuição dos valores!

Quiz - escolha a(s) alternativa(s) correta(s)

É possível afirmar que

  1. o valor no qual vemos o pico de um histograma vai ser a moda do conjunto de dados
  2. o valor da mediana e da média é sempre o mesmo
  3. moda e mediana são medidas influenciadas por valores extremos da amostra
  4. a média é sempre a melhor medida para representar um conjunto de dados

Agora é com você

Você tem o arquivo chamado scorestotal.xlsx. Nesse arquivo, você tem uma coluna com o conjunto de dados “presente”, que acabamos de analisar, e o conjunto “passado”, descrito por Hinton na página 18. A coluna “presente” indica as notas obtidas no ano corrente. A coluna “passado” indica as notas obtidas no ano anterior.

  1. Importe o conjunto de dados
  2. Calcule as medidas de tendência central para os dois anos
  3. Faça um histograma dos dois anos
  4. O que você pode dizer sobre as médias e medianas desse conjunto de dados?

Respostas

Importe o conjunto de dados

dados.scores = read_excel("scorestotal.xlsx")

Respostas

Calcule as medidas de tendência central para os dois anos

mean(dados.scores$presente)
## [1] 52.62
mean(dados.scores$passado)
## [1] 54.25
median(dados.scores$presente)
## [1] 55
median(dados.scores$passado)
## [1] 56.5

Histograma de notas do ano presente

ggplot(dados.scores, aes(x=presente, y=))+
  geom_histogram(breaks=seq(0, 100, by = 1))+
  labs(x="Nota na prova (ano presente)", y="Número de alunos")

Histograma de notas do ano passado

ggplot(dados.scores, aes(x=passado, y=))+
  geom_histogram(breaks=seq(0, 100, by = 1))+
  labs(x="Nota na prova (ano passado)", y="Número de alunos")

Dicas para aprender a fazer gráficos

Brinque com os os códigos que você já tem mudando alguns valores e adicionando mais funções. A função labs do ggplot é usada para nomear o eixo x e eixo y como você quiser.

ggplot(dados.scores, aes(x=presente, y=))+
  geom_histogram(breaks=seq(0, 100, by = 1))+
  labs(x="Nota na prova (ano presente)", y="Número de alunos")

Dicas para aprender a fazer gráficos

Dica: se vc instalar e carregar o pacote scales, você pode usar a função pretty_breaks para escolher os intervalos a serem mostrados no gráfico. Aqui, eu pedi para ele me mostrar 10 intervalos (pretty_breaks(n=10)) na sequência que determinei de 0 a 100.

Dicas para aprender a fazer gráficos

ggplot(dados.scores, aes(x=presente, y=))+
  geom_histogram(breaks=seq(0, 100, by = 1))+
  labs(x="Nota na prova (ano presente)", y="Número de alunos")+
  scale_x_continuous(breaks=pretty_breaks(n=10))

Revisão

Iniciando

Algumas funções para iniciar sua seção

install.packages() #instala um pacote
library() #carrega um pacote
setwd() #indica o caminho para a pasta em que estão o conjunto de dados
read_excel() #importa conjunto de dados em xlsx
read.table() #importa conjunto de dados em outros formatos

Análise descritiva

Algumas funções para descrever seu conjunto de dados

c() #cria um vetor
sum() #soma todos os valores de um vetor
length() #indica o número de observações em um vetor
mean() #indica a média de um vetor
median() #indica a mediana de um vetor
sort() #organiza as observações do vetor por ordem crescente (para ordem descrescente, adicione decreasing = TRUE)

Informações gráficas

ggplot(dados, aes(x,y)) + #indica os vetores usados para definir eixo x e y para qualquer tipo de gráfico
  geom_histogram() + #indica o tipo de gráfico - nesse caso, um histograma (mas há geom_line, geom_boxplot, geom_bar, geom_point...)
  labs(x = "", y = "") #personaliza o nome dos eixos x e y